/*
 * Matrix2x3.h
 *
 *  Created on: 2011/06/24
 *      Author: naoki
 */

#ifndef INCLUDED_NTENGINE_MATH_MATRIX2X3_H
#define INCLUDED_NTENGINE_MATH_MATRIX2X3_H

namespace NTEngine {
namespace Math {
class Vector2;

/**
 * @brief 2D座標変換用行列
 */
class Matrix2x3 {
public:
	float m11, m12, m13;
	float m21, m22, m23;

	/**
	 * @brief デフォルトでは何もしません
	 */
	Matrix2x3(){ }

	/**
	 * @brief コピーコンストラクタ
	 */
	Matrix2x3( const Matrix2x3& );

	/**
	 * @brief 代入演算
	 */
	void operator=( const Matrix2x3& );

	/**
	 * @brief 行列の積です
	 */
	void operator*=( const Matrix2x3& );

	/**
	 * @brief 移動行列をセットします
	 */
	void setTranslation( const Vector2& );

	/**
	 * @brief 回転行列をセットします
	 */
	void setRotation( float );

	/**
	 * @brief スケーリング行列をセットします
	 */
	void setScaling( const Vector2& );

	/**
	 * @brief 2Dベクタとの積を求めます
	 */
	void multiply( const Vector2&, Vector2* ) const;

	/**
	 * @brief 移動変換します
	 */
	void translate( const Vector2& );

	/**
	 * @brief 回転変換します
	 */
	void rotate( float );

	/**
	 * @brief スケーリング変換します
	 */
	void scale( const Vector2& );
};

} // namespace Math
} // namespace NTEngine

#endif /* MATRIX2X3_H_ */
